package com.wj.crm.controller;

import com.wj.crm.base.BaseController;
import com.wj.crm.base.ResultInfo;
import com.wj.crm.exceptions.ParamsException;
import com.wj.crm.model.UserModel;
import com.wj.crm.query.UserQuery;
import com.wj.crm.service.UserService;
import com.wj.crm.utils.LoginUserUtil;
import com.wj.crm.vo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * @author WangJin
 * @version 1.0
 * @date 2021/12/10 11:29
 */
@Controller
@RequestMapping("user")
public class UserController extends BaseController {
    @Autowired
    private UserService userService;
    /**
     * 用户登录
     * @param userName
     * @param userPwd
    Starter
    修改启动类，在启动类上添加 @MapperScan 注解，设置扫描包范围。
    PostMan 测试
    利用 Postman 工具，对用户登录的接口进行测试。
     * @return
     */
    @PostMapping("login")
    @ResponseBody
    public ResultInfo userLogin (String userName, String userPwd) {
        ResultInfo resultInfo = new ResultInfo();
        // 调用Service层的登录方法，得到返回的用户对象
        UserModel userModel = userService.userLogin(userName, userPwd);

        resultInfo.setResult(userModel);
//    // 通过 try catch 捕获 Service 层抛出的异常
//        try {
//    // 调用Service层的登录方法，得到返回的用户对象
//            UserModel userModel = userService.userLogin(userName, userPwd);
//    /**
//     * 登录成功后，有两种处理：
//     * 1. 将用户的登录信息存入 Session （ 问题：重启服务器，Session 失效，客户端
//     需要重复登录 ）
//     * 2. 将用户信息返回给客户端，由客户端（Cookie）保存
//     */
//    // 将返回的UserModel对象设置到 ResultInfo 对象中
//            resultInfo.setResult(userModel);
//        } catch (ParamsException e) { // 自定义异常
//            e.printStackTrace();
//    // 设置状态码和提示信息
//            resultInfo.setCode(e.getCode());
//            resultInfo.setMsg(e.getMsg());
//        } catch (Exception e) {
//            e.printStackTrace();
//            resultInfo.setCode(500);
//            resultInfo.setMsg("操作失败！");
//        }
        return resultInfo;
    }

    @PostMapping("updatePassword")
    @ResponseBody
    public ResultInfo updateUserPassword(HttpServletRequest request,String oldPassword, String newPassword,String confirmPassword){
        ResultInfo resultInfo = new ResultInfo();

        //获得userId
        Integer userId = LoginUserUtil.releaseUserIdFromCookie(request);
        //调用Service层的密码修改方法
        userService.updateUserPassword(userId,oldPassword,newPassword,confirmPassword);
//        //通过try catch 捕获Service 层抛出异常
//        try{
//
//        }catch (ParamsException e){ //自定义异常
//            e.printStackTrace();
//            //设置状态码和提示信息
//            resultInfo.setCode(e.getCode());
//            resultInfo.setMsg(e.getMsg());
//        }catch (Exception e){
//            e.printStackTrace();
//            resultInfo.setCode(500);
//            resultInfo.setMsg("操作失败！");
//        }
        return resultInfo;
    }

    @RequestMapping("toPasswordPage")
    public String toPasswordPage(){
        return "user/password";
    }

    @RequestMapping("toInformationPage")
    public String toInformationPage(){
        return "user/information";
    }

    @PostMapping("updateInformation")
    @ResponseBody
    public ResultInfo updateInformation(HttpServletRequest request,String userName, String email,String phone){
        ResultInfo resultInfo = new ResultInfo();

        //获得userId
        Integer userId = LoginUserUtil.releaseUserIdFromCookie(request);
        UserModel userModel = userService.updateInformation(userId, userName, email, phone);
        resultInfo.setResult(userModel);
        return resultInfo;
    }


    @RequestMapping("toSettingPage")
    public String toSettingPage() {
        return "user/user";
    }

    /**
     * 查询所有的销售人员
     * @return
     */
    @RequestMapping("queryAllSales")
    @ResponseBody
    public List<Map<String, Object>> queryAllSales() {
        return userService.queryAllSales();
    }

    /**
     * 多多条件查询
     * @param userQuery
     * @return
     */
    @RequestMapping("list")
    @ResponseBody
    public Map<String,Object> selectByParams(UserQuery userQuery){
        //return userService.queryByParamsForTable(userQuery); //走 baseService
        return userService.selectByParams(userQuery);
    }

    @RequestMapping("index")
    public String index(){
        return "user/user";
    }

    @PostMapping("add")
    @ResponseBody
    public ResultInfo userAdd(User user){
        userService.addUser(user);
        return success("用户添加成功!");
    }

    @RequestMapping("toAddOrUpdateUserPage")
    public String toAddOrUpdateUserPage(Integer id,HttpServletRequest request){
        //判断id是否为空，不为空表示更新操作，查询用户对象
        if(id != null){
            //通过id查询对象
            User user = userService.selectByPrimaryKey(id);
            request.setAttribute("userInfo",user);
        }
        return "user/add_update";
    }

    @PostMapping("update")
    @ResponseBody
    public ResultInfo userUpdate(User user){
        userService.updateUser(user);
        return success("用户更新成功!");
    }

    @PostMapping("delete")
    @ResponseBody
    public ResultInfo delete(Integer[] ids){
        userService.deleteByIds(ids);
        return success("用户删除成功！");
    }


    /**
     * 查询所有的客户经理
     *
     * @param
     * @return java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     */
    @RequestMapping("queryAllCustomerManagers")
    @ResponseBody
    public List<Map<String,Object>> queryAllCustomerManagers(){
        return userService.queryAllCustomerManagers();
    }
}
